<?php


// function set_token()
// {
// 	$v     = 1;
// 	$key   = mt_rand();
// 	$hash  = hash_hmac("sha1", $v . mt_rand() . time(), $key, true);
// 	$token = str_replace('=', '', strtr(base64_encode($hash), '+/', '-_'));
// 	return $token;
// }

/**
 * 下载图片并生成压缩包
 * @param $data    图片数组，一维
 * @param $tmpDir 存放路径
 * @return string
 */
function downloadZipImg($picAllArr,$name)
{
	trace('请求了','zip');
//	$picAllArr = ['http://www.dada.com/a.jpg','http://www.dada.com/b.jpg'];

	$tmpDir = './download/'; // 类似于/www/public/upload/

	if (!file_exists($tmpDir)) {
		//创建文件夹
		mkdir($tmpDir, 0777, true);
	}

	$zipName    = $name.date('His') . mt_rand(1000, 9999) . '.zip'; // 压缩包文件名
	$zipNameUrl = $tmpDir . $zipName; // 文件路径

	// 生成文件
	$zip = new \ZipArchive();
	if ($zip->open($zipNameUrl, \ZipArchive::OVERWRITE) !== true) {
		//OVERWRITE 参数会覆写压缩包的文件 文件必须已经存在
		if ($zip->open($zipNameUrl, \ZipArchive::CREATE) !== true) {
			// 文件不存在则生成一个新的文件 用CREATE打开文件会追加内容至zip
			return '下载失败，文件夹不存在';
		}
	}

	foreach ($picAllArr as $file) {
		echo $file;
		//判断图片是否存在
		$isFile = checkFileExists($file);
		if (!$isFile) {
			continue;
		}
		//抓取图片内容
		$fileContent = file_get_contents($file);
		//添加图片
		$zip->addFromString(basename($file), $fileContent);
	}
	// 关闭
	$zip->close();

	//没有文件
	if (!file_exists($zipNameUrl)) {
		return '下载失败，图片不存在或无法下载';
	}

	header("Cache-Control: public");
	header("Content-Description: File Transfer");
	header('Content-disposition: attachment; filename=' . $zipName); //文件名
	header("Content-Type: application/zip"); //zip格式的
	header("Content-Transfer-Encoding: binary"); //告诉浏览器，这是二进制文件
	header('Content-Length: ' . filesize($zipNameUrl)); //告诉浏览器，文件大小

	// 下面2步必须要
	ob_clean();
	flush();

	@readfile($zipNameUrl);
	unlink($zipNameUrl); // 删除文件
	exit;
}

/**
 * 判断文件是否存在，支持本地及远程文件
 * @param String $file 文件路径
 * @return Boolean
 */
function checkFileExists($file)
{
	// 远程文件
	if (strtolower(substr($file, 0, 5)) == 'https') {
		// 远程文件
		$header = get_headers($file, true);
		return isset($header[0]) && (strpos($header[0], '200') || strpos($header[0], '304'));

	} elseif (strtolower(substr($file, 0, 4)) == 'http') {
		// 远程文件
		$header = get_headers($file, true);
		return isset($header[0]) && (strpos($header[0], '200') || strpos($header[0], '304'));
	} else {
		// 本地文件
		return file_exists($file);
	}
}

